Εισαγωγή

→

Zeus TextEditorControl

Zeus TextEditorControl version 1.0

Κλάσεις: TextEditorControl

Inherits: System.Windows.Controls.UserControl

Namespace: Zeus.WPF.Controls.TextEditorControl

Assembly: ZeusTextEditorControl (in ZeusTextEditorControl.dll)

Dependencies: -

Δείγματα:

Απλοποιημένο.

Κατάλληλο για ενσωμάτωση, ως πεδίο, σε μία φόρμα δεδομένων, παρέχοντας άμεση γραφή εμπλουτισμένου κειμένου (rich text).

Πλήρες.

Κατάλληλο να λειτουργήσει αυτόνομα ως ένας μικρός επεξεργαστής κειμένου (μικρών σημειώσεων). Παρέχει, αποθήκευση/άνοιγμα σε/από αρχεία xamlpackage, rtf και plain text.

Παρέχει αρκετούς διακόπτες για εμφάνιση/απόκρυψη κάποιων UI elements.

Περιγραφή

To Zeus TextEditorControl παρέχει τη δυνατότητα να εισάγει ο χρήστης εμπλουτισμένο κείμενο (rich text). Έχει χτιστεί γύρω από το default RichTextBox control που παρέχει η εργαλειοθήκη WPF του Visual Studio 2019.

Μπορεί να λειτουργήσει σε δύο μορφές:

•Ως ένα απλοποιημένο πεδίο εισαγωγής κειμένου με μία μπάρα μορφοποίησης στο πάνω μέρος. Όταν σχεδίαζα το control αυτήν την χρησιμότητα είχα κυρίως στο μυαλό μου, ώστε να γίνει binding με ένα source πεδίο σημειώσεων μίας database. Οι μορφοποιημένες σημειώσεις θα μπορούν να αποθηκεύονται (ως ένα xaml text, με root element το <FlowDocument>) σε ένα πεδίο ενός πίνακα.

•Ως ένα standalone text editor σε δικό του παράθυρο με δυνατότητα αποθήκευσης/ανάκτησης σε/από αρχείο xamlpackage, rtf ή plain text. Φυσικά, τίποτα δεν μας εμποδίζει να χρησιμοποιήσουμε την πλήρη μορφή του (η μερικώς, καθορίζοντας μερικούς διακόπτες για εμφάνιση/απόκρυψη μερικών UI elements) και ως πεδίο εισαγωγής.

Να σημειώσουμε ότι, με μία ιδιότητα μπορούμε να εναλλάξουμε το Ελληνικό UI σε Αγγλικό UI.

Παρατηρήσεις

•Λόγω της φύσης του xaml text υπάρχει ένα μειονέκτημα: Η αποθήκευση σε ένα πεδίο μίας database γίνεται ως xaml text με root element το <FlowDocument>. Αν ο χρήστης έχει τοποθετήσει εικόνα τότε το απόλυτο path του αρχείου αυτής εμπεριέχεται σε ένα <InlineUIContainer> και όχι το ίδιο το περιεχόμενο τη εικόνας. Αυτό, δεν είναι πρόβλημα όσο δεν αλλάζουμε τη θέση των αρχείων εικόνων. Αν μεταφέρουμε την εφαρμογή σε άλλον υπολογιστή, πρέπει να μεταφερθούν στην ίδια θέση, όπως στον προηγούμενο υπολογιστή, και οι εικόνες. Διαφορετικά, δεν θα βρεί τις εικόνες (εκτός αν το απόλυτο path είναι το ίδιο π.χ. C:\MyImages) και ως εκ τούτου οι σημειώσεις στο πεδίο δεν θα διαβαστούν. Σε μελλοντική έκδοση του control θα κοιτάξω κάποιες τεχνικές λύσεις επ' αυτού.

•Στην παρούσα έκδοση, αν και φαίνεται ότι μία εικόνα μπορεί να αντιγραφεί/αποκοπεί/μετακινηθεί και επίσης να μεγεθυνθεί/σμικρυνθεί, η αποθήκευση δημιουργεί ένα xaml text όπου το απόλυτο path είναι προσωρινό και η ανάκτηση του xaml text θα αποτύχει. Αυτό οφείλεται σε ένα εγγενές θέμα του WPF. Ελπίζω, να το επιλύσω στην επόμενη έκδοση. Προς το παρόν, ο μόνος ασφαλής τρόπος είναι να εισάγεται εικόνα μόνο μέσω του κουμπιού [image] (εισαγωγή εικόνας). Φυσικά, η αντιγραφή/αποκοπή/μετακίνηση κειμένου δεν έχει πρόβλημα.

Δείγματα του UI

Ένα δείγμα ως τμήμα μίας φόρμας δεδομένων μαθητή. Χρησιμοποιούμε, για λόγους επίδειξης, τρία πεδία δεδομένων: Όνομα, Επώνυμο, Σημειώσεις. Οι σημειώσεις καταχωρούνται και εμφανίζονται σε ένα TextEditorControl.

XAML :

<Window x:Class="MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="TextEditorControl Sample" Height="449.776" Width="921.622" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" >

<Window.Resources>

<!--Styles-->

<Style x:Key="TitleStyle" TargetType="{x:Type TextBlock }">

<Setter Property="FontSize" Value="18"/>

<Setter Property="Foreground" Value="Blue"/>

<Setter Property="HorizontalAlignment" Value="Right"/>

<Setter Property="VerticalAlignment" Value="Center"/>

</Style>

<Style x:Key="RowLabelsStyle" TargetType="{x:Type TextBlock }">

<Setter Property="FontSize" Value="16"/>

<Setter Property="Foreground" Value="Black"/>

<Setter Property="HorizontalAlignment" Value="Right"/>

<Setter Property="VerticalAlignment" Value="Center"/>

</Style>

<Style x:Key="RowValuesStyle" TargetType="{x:Type TextBox }">

<Setter Property="FontSize" Value="16"/>

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="VerticalContentAlignment" Value="Center"/>

</Style>

</Window.Resources>

<Grid Name="grdStudentData" Margin="10">

<Grid.ColumnDefinitions >

<ColumnDefinition Width="22.623"/>

<ColumnDefinition Width="147.377"/>

<ColumnDefinition />

</Grid.ColumnDefinitions>

<Grid.RowDefinitions >

<RowDefinition Height="100"/>

<RowDefinition Height="50"/>

<RowDefinition Height="50"/>

<RowDefinition Height="Auto"/>

</Grid.RowDefinitions>

<!-- Top content-->

<StackPanel Orientation="Horizontal" Background="#AED581" Grid.ColumnSpan="3" Margin="0,0,0,15">

<Image Name="iconStudent" Source="Images/Student64x64.png" Width="64" Height="64" Margin="10,0,0,0" />

<TextBlock Text="Μαθητής" Style="{StaticResource TitleStyle }" Margin="20,0,0,0"/>

</StackPanel>

<!-- Navigation buttons -->

<StackPanel Grid.Column="2" Orientation="Horizontal" Margin="25,0,0,5" HorizontalAlignment="Left" ButtonBase.Click="ButtonsNavigation_Click">

<StackPanel.Resources >

<Style x:Key="NavigationButtonStyle" TargetType="{x:Type Button}">

<Setter Property="Height" Value="40"/>

<Style.Triggers >

<Trigger Property="IsEnabled" Value="False">

<Setter Property="Opacity" Value="0.4"/>

</Trigger>

</Style.Triggers>

</Style>

</StackPanel.Resources>

<Button Name="btnPrevious" Style="{StaticResource NavigationButtonStyle}" ToolTip="Προηγούμενος" >

<Image Source="Images/Previous256x256.png" Width="32" Height="32" />

</Button>

<Label Name="lbInfo" Content="0/0" VerticalAlignment="Center" Margin="5,0,5,0" FontSize="18" />

<Button Name="btnNext" Style="{StaticResource NavigationButtonStyle}" ToolTip="Επόμενος">

<Image Source="Images/Next256x256.png" Width="32" Height="32" />

</Button>

</StackPanel>

<Button Name="btnSave" Grid.Column="2" Height="40" HorizontalAlignment="Left" Margin="205,0,0,0" Background="Transparent" BorderBrush="Transparent"

ToolTip="Αποθήκευση εγγραφής" Click="btnSave_Click" >

<Image Source="Images/Save_64x64.png" Width="32" Height="32" />

</Button>

<!-- Content: Data -->

<TextBlock Grid.Row="1" Name="tbFirstName" Text="Όνομα: " Style="{StaticResource RowLabelsStyle }" Grid.Column="1" />

<TextBox Grid.Row="1" Grid.Column="2" Name="txtFirstNameData" Text="{Binding FirstName}" Style="{StaticResource RowValuesStyle }" />

<TextBlock Grid.Row="2" Name="tbLastName" Text="Επώνυμο: " Style="{StaticResource RowLabelsStyle }" Grid.Column="1" />

<TextBox Grid.Row="2" Grid.Column="2" Name="txtLastNameData" Text="{Binding LastName}" Style="{StaticResource RowValuesStyle }" />

<!-- Notes-->

<StackPanel Grid.Row="3" Grid.Column="1" Margin="0,10,0,0" VerticalAlignment="Center" >

<TextBlock Name="tbNotes" Text="Σημειώσεις: " Style="{StaticResource RowLabelsStyle }" />

<Button Name="btnEditNotes" Background="Transparent" BorderBrush="Transparent" Width="32" Height="32" Margin="50,0,0,0"

ToolTip="Επεξεργασία σημειώσεων σε ξεχωριστό παράθυρο" Click="btnEditNotesAdvanced_Click" >

<Image Source="Images/Edit256x256.png" Width="32" Height="32" />

</Button>

</StackPanel>

<zeus:TextEditorControl Grid.Row="3" Grid.Column="2" Name="txtEditor" UsingTheControlAs="PartInAWindow" ShowStandardToolbar="False"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

DocumentXamlText="{Binding Notes }"

BackgroundTextArea="Yellow" />

</Grid>

</Window>

Ένα στιγμιότυπο:

Το button με το μολύβι ανοίγει ένα παράθυρο με πλήρες αναπτυγμένο το control:

XAML :

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}"

Height="368.991" Width="687.465" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True" ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

Ένα στιγμιότυπο:

Aνάπτυξη: Χρήστος Μουρατίδης - Zeus Software Solutions ©2019 - Email: mouratx@yahoo.com


Ο ορισμός της κλάσης

← →

Zeus TextEditorControl

Η κλάση έχει οριστεί ως εξής:

Σύνταξη:

VB:

Public Class TextEditorControl

XAML Object Element Usage:

Εισαγωγή namespace:

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

Χρήση:

<zeus:TextEditorControl ... />


Περιγραφή UI

Zeus TextEditorControl

Σε πλήρη ανάπτυξη το TextEditorControl εμφανίζεται ως εξής:

Περιλαμβάνει:

•Μενού, με τις βασικές εργασίες.

•Toolbars, για άμεση πρόσβαση σε βασικές λειτουργίες.

•Το RichTextBox, για τον χώρο γραφής.

•Δύο dialog buttons, για ΟΚ και Ακύρωση.

Παρουσιάζουμε παρακάτω αναλυτικά, τα UI Elements.

Μενού

Μενού Αρχείο:

Δημιουργία νέου εγγράφου (New).

Άνοιγμα εγγράφου από το δίσκο (Open...).

Αποθηκεύει στο αρχείο στο δίσκο. Αν είναι πρώτη φορά, θα ζητήσει το όνομα του αρχείου (Save).

Αποθηκεύει σε αρχείο στο δίσκο με νέο όνομα (Save as...).

Έξοδος (Exit).

Μενού Επεξεργασία:

Αναίρεση (Undo).

Επαναφορά (Redo).

Αποκοπή (Cut).

Αντιγραφή (Copy).

Επικόλληση (Paste).

Μεγέθυνση εικόνας (Scale up image).

Σμίκρυνση εικόνας (Scale down image).

Μενού Εισαγωγή:

Εισαγωγή εικόνας (Insert image).

Toolbars

Πρώτη σειρά (Βασική):

Τα κουμπιά περιγράφονται παραπάνω.

Δεύτερη σειρά (Μορφοποίησης):

Επιλογή γραμματοσειράς. Ο χρήστης μπορεί να
επιλέξει από την λίστα ή να πληκτρολογήσει κάποια και να πατήσει Enter. (FontFamily)

Επιλογή μεγέθους γραμματοσειράς. χρήστης μπορεί να επιλέξει από την λίστα ή να πληκτρολογήσει κάποιον αριθμό (>5) και να πατήσει Enter (Font size).

Αύξηση μεγέθους γραμματοσειράς (Increase font size).

Μείωσημεγέθους γραμματοσειράς (Decrease font size).

Έντονη γραφή (Bold).

Πλάγια γραφή (Italic).

Υπογράμμιση (Underline).

Στοίχιση αριστερά (Alignment left).

Στοίχιση κέντρο (Alignment center).

Στοίχιση δεξιά (Alignment right).

Πλήρης στοίχιση (Justify).

Διπλό κουμπί. Το πρώτο δείχνει το τρέχον χρώμα κειμένου (Font color) και πατώντας το εφαρμόζεται στην τρέχουσα επιλογή. Το δεύτερο (βέλος) εμφανίζει μία παλέτα χρωμάτων για επιλογή.

Διπλό κουμπί. Το πρώτο δείχνει το τρέχον χρώμα φόντου κειμένου (Font back color) και πατώντας το εφαρμόζεται στην τρέχουσα επιλογή. Το δεύτερο (βέλος) εμφανίζει μία παλέτα χρωμάτων για επιλογή.

Να σημειώσουμε ότι οι toolbars μπορούν να μετακινηθούν κατά βούληση από τον χρήστη.


Διανομή

← →

Zeus TextEditorControl

Κατά τη διανομή, στο φάκελο της εφαρμογής σας πρέπει να αντιγράψετε το assembly αρχείο ZeusTextEditorControl.dll.


Επικοινωνία

Zeus TextEditorControl

Για οποιαδήποτε πληροφορία ή διευκρίνηση παρακαλώ επικοινωνήστε μαζί μου στο :

mouratx@yahoo.com ή mouratx@hotmail.com

Χρήστος Μουρατίδης,

Πειραιάς, Δεκέμβριος 2019

Υ.Γ. Μπορείτε να επικοινωνήσετε μαζί μου για να προμηθευτείτε το βιβλίο μου "Μάθετε το WPF με τη Visual Basic" (1.333 σελίδες, Αυτοέκδοση 2018).


Απαριθμήσεις - SortControl

Απαριθμήσεις

← →

Zeus TextEditorControl

Όνομα | Περιγραφή
LanguageUIEnum | Περιλαμβάνει τιμές για καθορισμό του UI (Ελληνικό ή Αγγλικό).
UsingTheControlAsEnum | Περιλαμβάνει τιμές για το πώς επιθυμούμε να σταθεί το control σε ένα παράθυρο (τμήμα του παραθύρου ή μόνο του στο παράθυρο).


LanguageUIEnum

Απαριθμήσεις

Περιλαμβάνει τιμές για καθορισμό του UI (Ελληνικό ή Αγγλικό).

Σύνταξη:

VB:

Public Enum LanguageUIEnum

Μέλη:

Τιμή | Περιγραφή
English | Αγγλικό UI
Greek | Ελληνικό UI

Παρατηρήσεις:

Η ιδιότητα LanguageUI λαμβάνει τιμές από αυτήν την απαρίθμηση. Η επιλογή αντικαθιστά κατάλληλα τα λεκτικά στα menus, tooltips, (όχι το κείμενο των dialog buttons. Αυτό αλλάζει με τις αντίστοιχες ιδιότητες) και μηνύματα παραθύρων λάθους.


UsingTheControlAsEnum

Απαριθμήσεις

Περιλαμβάνει τιμές για το πώς επιθυμούμε να σταθεί το control σε ένα παράθυρο (τμήμα του παραθύρου ή μόνο του στο παράθυρο).

Σύνταξη:

VB:

Public Enum UsingTheControlAsEnum

Μέλη:

Τιμή | Περιγραφή
StandaloneInAWindow | Ως αυτόνομο στο παράθυρο.
PartInAWindow | Ως τμήμα στο παράθυρο (κατάλληλο για πεδία σημειώσεων).

Παρατηρήσεις:

Η ιδιότητα UsingTheControlAs λαμβάνει τιμές από αυτήν την απαρίθμηση. Η επιλογή επιδρά στο UI καθώς εμφανίζει/αποκρύπτει αυτόματα κάποια UI elements. Για παράδειγμα, αν επιλέξουμε PartInAWindow τότε αποκρύβονται τα μενού και τα dialog buttons. Αυτό, όμως, δεν είναι δεσμευτικό. Υπάρχουν αρκετές ιδιότητες που μας επιτρέπουν να διαμορφώσουμε το UI όπως επιθυμούμε.


Ιδιότητες - ColorSwatchHTML16

Ιδιότητες

← →

Zeus TextEditorControl

Όνομα | Περιγραφή
BackgroundTextArea | Καθορίζει το χρώμα φόντου του χώρου γραφής (δηλαδή του ενσωματωμένου RichTextBox). Είναι τύπου Brush.
ConfirmOnExit | Καθορίζει αν κατά την έξοδο θα ζητάει επιβεβαίωση από τον χρήστη. Είναι τύπου Boolean.
CurrentFontBackBrush | Καθορίζει το τρέχον χρώμα φόντου του κειμένου (font back color), τύπου Brush.
CurrentFontBrush | Καθορίζει το τρέχον χρώμα κειμένου (font color), τύπου Brush.
DialogButtonCancelStyle | Καθορίζει το στυλ για το button "Ακύρωση", τύπου Style.
DialogButtonCancelText | Καθορίζει το κείμενο (λεκτικό) για το button "Ακύρωση", τύπου String.
DialogButtonOKStyle | Καθορίζει το στυλ για το button "ΟΚ", τύπου Style.
DialogButtonOKText | Καθορίζει το κείμενο (λεκτικό) για το button "OK", τύπου String.
DocumentTitle | Καθορίζει το κείμενο που θα εμφανίζεται στη γραμμή τίτλου του παραθύρου στο οποίο έχει τοποθετηθεί το TexEditorControl. Είναι τύπου String. Για να λειτουργήσει θα πρέπει να κάνουμε binding αυτήν την ιδιότητα με την ιδιότητα Title του Window.
DocumentXamlText | Καθορίζει το περιεχόμενο του TextEditorControl, τύπου String. Πρόκειται για την βασικότερη ιδιότητα. Η τιμή της είναι ένα xaml text που περιγράφει ένα αντικείμενο FlowDocument. Αν πρόκειται να χρησιμοποιήσουμε το control ως πεδίο σημειώσεων τότα θα κάνουμε binding αυτήν την ιδιότητα με την αντίστοιχη ιδιότητα π.χ. Notes ενός source αντικειμένου.
EmptyDocumentXamlText | Καθορίζει το xaml text που περιγράφει ένα κενό FlowDocument. Είναι τύπου String. Χρήσιμη ιδιότητα για να καθορίσουμε τί χαρακτηριστικά θέλουμε να έχει ένα αρχικό έγγραφο.
HasTextChanged | Καθορίζει αν έχουν υπάρξει αλλαγές στο περιεχόμενο του TextEditorControl. Είναι τύπου Boolean.
LanguageUI | Καθορίζει αν θα έχουμε Αγγλικό ή Ελληνικό UI. Είναι τύπου LanguageUIEnum .
ScaleFactorStepForImage | Καθορίζει το βήμα αύξησης/μείωσης για μεγέθυνση/σμίκρυνση εικόνας, αντίστοιχα. Είναι τύπου Single.
ShowDialogButtons | Καθορίζει αν θα εμφανίζονται τα dialog buttons "ΟΚ" και "Ακύρωση". Είναι τύπου Boolean.
ShowMenu | Καθορίζει αν θα εμφανίζονται τα menu. Είναι τύπου Boolean.
ShowSaveButtonInToolbar | Καθορίζει αν θα εμφανίζεται το button "Αποθήκευση" στη βασική toolbar. Είναι τύπου Boolean.
ShowStandardToolbar | Καθορίζει αν θα εμφανίζεται η βασική toolbar (new, open, save κλπ). Είναι τύπου Boolean.
ShowToolbars | Καθορίζει αν θα εμφανίζονται όλες οι toolbars. Είναι τύπου Boolean.
UsingDefaultDialogButtonsStyle | Καθορίζει αν θα εφαρμοστεί η default εμφάνιση των dialog buttons. Είναι τύπου Boolean. Η default εμφάνιση περιλαμβάνει στρογγυλοποιημένα buttons.
UsingTheControlAs | Καθορίζει πώς θα χρησιμοποιηθεί το control, ως standalone στο παράθυρο ή ως τμήμα παραθύρου και χρήση ως πεδίο σημειώσεων σε μία φόρμα δεδομένων. Είναι τύπου UsingTheControlAsEnum .


BackgroundTextArea

Ιδιότητες

Καθορίζει το χρώμα φόντου του χώρου γραφής (δηλαδή του ενσωματωμένου RichTextBox). Είναι τύπου Brush.

Σύνταξη:

VB:

Public Property BackgroundTextArea As Brush

Τύπος: System.Windows.Media.Brush

Προσδιορίζουμε ένα Brush που θα εφαρμοστεί στον χώρο γραφής του κειμένου. Το default είναι ένα SolidColorBrush άσπρου χρώματος.

Dependency Property Information:

Identifier field: BackgroundTextAreaProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, θέτουμε χρώμα κίτρινο στον χώρο γραφής του control:

XAML:

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="PartInAWindow" ShowStandardToolbar="False" Height="140" Width="Auto"

HorizontalAlignment="Left" Margin="0,10,0,0"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

txtEditor.BackgroundTextArea = New SolidColorBrush(Colors.Yellow)


ConfirmOnExit

Ιδιότητες

Καθορίζει αν κατά την έξοδο θα ζητάει επιβεβαίωση από τον χρήστη. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ConformOnExit As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα ζητείται επιβεβαίωση εξόδου από τον χρήστη. H default τιμή είναι True.

Dependency Property Information:

Identifier field: ConformOnExitProperty

Παρατηρήσεις:

•Αυτή η ιδιότητα έχει νόημα αν το control χρησιμοποιηθεί ως αυτόνομος επεξεργαστής σε ένα παράθυρο. Η επιβεβαίωση ζητείται είτε όταν πατηθεί το button "Ακύρωση" είτε από το menu Αρχείο --> Έξοδος είτε στο συμβάν Closing του Window βάζοντας μία γραμμή κώδικα (δες παράδειγμα εδώ ).

•Επίσης, το μήνυμα επιβεβαίωσης θα είναι στα Ελληνικά ή Αγγλικά, ανάλογα με το τί έχουμε θέσει στην ιδιότητα LanguageUI.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να ζητείται επιβεβαίωση εξόδου:

XAML:

<zeus:TextEditorControl Name="txtEditor" ConfirmOnExit="True" ... />

VB:

txtEditor.ConfirmOnExit = True

Ελληνικό UI | Αγγλικό UI


CurrentFontBackBrush

Ιδιότητες

Καθορίζει το τρέχον χρώμα φόντου του κειμένου (font back color), τύπου Brush.

Σύνταξη:

VB:

Public Property CurrentFontBackBrush As Brush

Τύπος: System.Windows.Media.Brush

Προσδιορίζουμε ένα Brush που θα εφαρμοστεί ως φόντο στη γραφή του κειμένου. Το default είναι ένα SolidColorBrush άσπρου χρώματος.

Dependency Property Information:

Identifier field: CurrentFontBackBrushProperty

Παρατηρήσεις:

•Το τρέχον χρώμα φόντου στο επιλεγμένο κείμενο κανονικά το επιλέγει ο χρήστης μέσω του διπλού button [image] αλλά μπορούμε να το αλλάξουμε και μέσω κώδικα.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε το τρέχον χρώμα φόντου κειμένου σε κυανό :

XAML:

<zeus:TextEditorControl Name="txtEditor" CurrentFontBackBrush="Cyan" ... />

VB:

txtEditor.CurrentFontBackBrush = New SolidColorBrush(Colors.Cyan)

Η αντίστοιχη ένδειξη τρέχοντος χρώματος φόντου στο διπλό button αλλάζει: Όποιο κείμενο επιλέξουμε και πατήσουμε το button θα εφαρμοστεί το κυανό χρώμα φόντου.


CurrentFontBrush

Ιδιότητες

Καθορίζει το τρέχον χρώμα κειμένου (font color), τύπου Brush.

Σύνταξη:

VB:

Public Property CurrentFontBrush As Brush

Τύπος: System.Windows.Media.Brush

Προσδιορίζουμε ένα Brush που θα εφαρμοστεί ως χρώμα κειμένου. Το default είναι ένα SolidColorBrush μαύρου χρώματος.

Dependency Property Information:

Identifier field: CurrentFontBrushProperty

Παρατηρήσεις:

•Το τρέχον χρώμα στο επιλεγμένο κείμενο κανονικά το επιλέγει ο χρήστης μέσω του διπλού button [image] αλλά μπορούμε να το αλλάξουμε και μέσω κώδικα.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε το τρέχον χρώμα κειμένου σε κόκκινο:

XAML:

<zeus:TextEditorControl Name="txtEditor" CurrentFontBrush="Red" ... />

VB:

txtEditor.CurrentFontBrush = New SolidColorBrush(Colors.Red)

Η αντίστοιχη ένδειξη τρέχοντος χρώματος κειμένου στο διπλό button αλλάζει: Όποιο κείμενο επιλέξουμε και πατήσουμε το button θα εφαρμοστεί το κόκκινο χρώμα γραφής.


DialogButtonCancelStyle

Ιδιότητες

Καθορίζει το στυλ για το button "Ακύρωση", τύπου Style.

Σύνταξη:

VB:

Public Property DialogButtonCancelStyle As Style

Τύπος: System.Windows.Style

Προσδιορίζουμε ένα Style που θα εφαρμοστεί στο button "Ακύρωση". Το default style είναι αυτό που έχει οριστεί εσωτερικά (στρογγυλοποιημένο button).

Dependency Property Information:

Identifier field: DialogButtonCancelStyleProperty

Παρατηρήσεις:

•Για να εφαρμοστεί το δικό μας style θα πρέπει να έχουμε θέσει την ιδιότητα UsingDefaultDialogButtonsStyle σε False.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε, μεταξύ άλλων, ένα συγκεκριμένο resource style με όνομα "buttonOKStyle" και το εφαρμόζουμε στο button "OK" και ένα δεύτερο resource style με όνομα "buttonCancelStyle" και το εφαρμόζουμε στο button "Ακύρωση". Επειδή έχουν κάποια κοινά χαρακτηριστικά (Padding, Width και ένα trigger για την mouseover κατάσταση) έχουμε ορίσει να βασίζονται σε ένα βασικό resource style με όνομα DialogButtonsStyle:

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}" Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Window.Resources >

<!-- Το κοινό style για τα Dialog buttons του TextEditorControl-->

<Style x:Key="DialogButtonStyle" TargetType="{x:Type Button }">

<Setter Property="Padding" Value="5"/>

<Setter Property="Width" Value="100"/>

<Style.Triggers >

<Trigger Property="IsMouseOver" Value="True">

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="Foreground" Value="Black"/>

</Trigger>

</Style.Triggers>

</Style>

<Style x:Key="buttonOKStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Green"/>

</Style>

<Style x:Key="buttonCancelStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Red"/>

<Setter Property="Margin" Value="5,0,0,0"/>

</Style>

</Window.Resources>

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="False"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonCancelStyle="{StaticResource buttonCancelStyle}"

DialogButtonOKStyle="{StaticResource buttonOKStyle}"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

Dim txtEditorDialogButtonStyle As New Style(GetType(Button))

Dim txtEditorOKButtonStyle As New Style(GetType(Button))

Dim txtEditorCancelButtonStyle As New Style(GetType(Button))

With txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = PaddingProperty, .Value = New Thickness(5)})

.Setters.Add(New Setter With {.[Property] = WidthProperty, .Value = CDbl(100)})

.Setters.Add(New Setter With {.[Property] = HeightProperty, .Value = CDbl(30)})

Dim trigger As New Trigger With {.[Property] = IsMouseOverProperty, .Value = True}

With trigger

.Setters.Add(New Setter With {.[Property] = FontWeightProperty, .Value = FontWeights.Bold})

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.Black})

End With

.Triggers.Add(trigger)

End With

With txtEditorOKButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Green})

End With

With txtEditorCancelButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Red})

.Setters.Add(New Setter With {.[Property] = MarginProperty, .Value = New Thickness(5)})

End With

With txtEditor

.UsingDefaultDialogButtonsStyle = False

.DialogButtonOKStyle = txtEditorOKButtonStyle

.DialogButtonCancelStyle = txtEditorCancelButtonStyle

End With


DialogButtonCancelText

Ιδιότητες

Καθορίζει το κείμενο (λεκτικό) για το button "Ακύρωση", τύπου String.

Σύνταξη:

VB:

Public Property DialogButtonCancelText As String

Τύπος: System.String

Προσδιορίζουμε μία τιμή String που θα αποτελεί το λεκτικό για το button "Ακύρωση". H default τιμή είναι "Ακύρωση".

Dependency Property Information:

Identifier field: DialogButtonCancelTextProperty

Παρατηρήσεις:

•Η αλλαγή του UI με την ιδιότητα LanguageUI δεν επηρεάζει αυτόματα το κείμενο του button "Ακύρωση". H αλλαγή του κειμένου του button "Ακύρωση" πρέπει να γίνει σαφώς από εδώ.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε το λεκτικό "Cancel" για το button "Ακύρωση", το λεκτικό "Done" για το button "ΟΚ". Να σημειώσουμε όιτι έχουμε κρατήσει το default dialog buttons style με την ιδιότητα UsingDefaultDialogButtonsStyle σε True.

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}" Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="English" ConfirmOnExit="True"

DialogButtonOKText="Done"

DialogButtonCancelText="Cancel"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

With txtEditor

.UsingDefaultDialogButtonsStyle = True

.DialogButtonOKText = "Done"

.DialogButtonCancelText = "Cancel"

End With


DialogButtonOKStyle

Ιδιότητες

Καθορίζει το στυλ για το button "ΟΚ", τύπου Style.

Σύνταξη:

VB:

Public Property DialogButtonOKStyle As Style

Τύπος: System.Windows.Style

Προσδιορίζουμε ένα Style που θα εφαρμοστεί στο button "ΟΚ". Το default style είναι αυτό που έχει οριστεί εσωτερικά (στρογγυλοποιημένο button).

Dependency Property Information:

Identifier field: DialogButtonOKStyleProperty

Παρατηρήσεις:

•Για να εφαρμοστεί το δικό μας style θα πρέπει να έχουμε θέσει την ιδιότητα UsingDefaultDialogButtonsStyle σε False.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε, μεταξύ άλλων, ένα συγκεκριμένο resource style με όνομα "buttonOKStyle" και το εφαρμόζουμε στο button "OK" και ένα δεύτερο resource style με όνομα "buttonCancelStyle" και το εφαρμόζουμε στο button "Ακύρωση". Επειδή έχουν κάποια κοινά χαρακτηριστικά (Padding, Width και ένα trigger για την mouseover κατάσταση) έχουμε ορίσει να βασίζονται σε ένα βασικό resource style με όνομα DialogButtonsStyle:

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}" Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Window.Resources >

<!-- Το κοινό style για τα Dialog buttons του TextEditorControl-->

<Style x:Key="DialogButtonStyle" TargetType="{x:Type Button }">

<Setter Property="Padding" Value="5"/>

<Setter Property="Width" Value="100"/>

<Style.Triggers >

<Trigger Property="IsMouseOver" Value="True">

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="Foreground" Value="Black"/>

</Trigger>

</Style.Triggers>

</Style>

<Style x:Key="buttonOKStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Green"/>

</Style>

<Style x:Key="buttonCancelStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Red"/>

<Setter Property="Margin" Value="5,0,0,0"/>

</Style>

</Window.Resources>

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="False"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonCancelStyle="{StaticResource buttonCancelStyle}"

DialogButtonOKStyle="{StaticResource buttonOKStyle}"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

Dim txtEditorDialogButtonStyle As New Style(GetType(Button))

Dim txtEditorOKButtonStyle As New Style(GetType(Button))

Dim txtEditorCancelButtonStyle As New Style(GetType(Button))

With txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = PaddingProperty, .Value = New Thickness(5)})

.Setters.Add(New Setter With {.[Property] = WidthProperty, .Value = CDbl(100)})

.Setters.Add(New Setter With {.[Property] = HeightProperty, .Value = CDbl(30)})

Dim trigger As New Trigger With {.[Property] = IsMouseOverProperty, .Value = True}

With trigger

.Setters.Add(New Setter With {.[Property] = FontWeightProperty, .Value = FontWeights.Bold})

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.Black})

End With

.Triggers.Add(trigger)

End With

With txtEditorOKButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Green})

End With

With txtEditorCancelButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Red})

.Setters.Add(New Setter With {.[Property] = MarginProperty, .Value = New Thickness(5)})

End With

With txtEditor

.UsingDefaultDialogButtonsStyle = False

.DialogButtonOKStyle = txtEditorOKButtonStyle

.DialogButtonCancelStyle = txtEditorCancelButtonStyle

End With


DialogButtonOKText

Ιδιότητες

Καθορίζει το κείμενο (λεκτικό) για το button "ΟΚ", τύπου String.

Σύνταξη:

VB:

Public Property DialogButtonOKText As String

Τύπος: System.String

Προσδιορίζουμε μία τιμή String που θα αποτελεί το λεκτικό για το button "ΟΚ". H default τιμή είναι "ΟΚ".

Dependency Property Information:

Identifier field: DialogButtonOKTextProperty

Παρατηρήσεις:

•Η αλλαγή του UI με την ιδιότητα LanguageUI δεν επηρεάζει αυτόματα το κείμενο του button "OK". H αλλαγή του κειμένου του button "OK" πρέπει να γίνει σαφώς από εδώ.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε το λεκτικό "Cancel" για το button "Ακύρωση", το λεκτικό "Done" για το button "ΟΚ". Να σημειώσουμε όιτι έχουμε κρατήσει το default dialog buttons style με την ιδιότητα UsingDefaultDialogButtonsStyle σε True.

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}" Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="English" ConfirmOnExit="True"

DialogButtonOKText="Done"

DialogButtonCancelText="Cancel"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

With txtEditor

.UsingDefaultDialogButtonsStyle = True

.DialogButtonOKText = "Done"

.DialogButtonCancelText = "Cancel"

End With


DocumentTitle

Ιδιότητες

Καθορίζει το κείμενο που θα εμφανίζεται στη γραμμή τίτλου του παραθύρου στο οποίο έχει τοποθετηθεί το TexEditorControl. Είναι τύπου String.

Σύνταξη:

VB:

Public Property DocumentTitle As String

Τύπος: System.String

Προσδιορίζουμε μία τιμή String που θα αποτελεί το λεκτικό για την γραμμή τίτλου του παραθύρου στο οποίο έχει τοποθετηθεί το control. H default τιμή είναι "Εγγραφο - TextEditor".

Dependency Property Information:

Identifier field: DocumentTitleProperty

Παρατηρήσεις:

•Η σκοπιμότητα ύπαρξης αυτής της ιδιότητας είναι να γίνει binding με την ιδιότητα Title του Window, στην περίπτωση που το control λειτουργεί ως αυτόνομος επεξεργαστής κειμένου.

Έτσι, όταν ανοίγουμε ένα αρχείο (Open) ή δημιουργούμε ένα νέο έγγραφο (New) ή όταν αποθηκεύουμε το έγγραφο με νέο όνομα αρχείου Save as...), o τίτλος του παραθύρου θα προσαρμόζεται ανάλογα.

Παράδειγμα:

Στο επόμενο παράδειγμα, συνδέουμε (bind) τον τίτλο του παραθύρου με την ιδιότητα DocumentTitle του txtEditor. Στον VB κώδικα, προσδιορίζουμε κατά το φόρτωμα του παραθύρου, να τίθεται ο τίτλος του παραθύρου με βάση την ιδιότητα FullName του τρέχοντος αντικειμένου Student.

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}"

Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

Public Class NotesWindow

'Τα δεδομένα του μαθητή.

Public Property student As New Student

Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)

With txtEditor

'Τίτλος παραθύρου του TextEditor.

.DocumentTitle = String.Format("Σημειώσεις για μαθητή/τρια {0} - TextEditor", student.FullName)

'Πηγή δεδομένων για το TextEditor. Προκειμένου για το binding με το πεδίο student.Notes

.DataContext = student

End With

End Sub

...

End Class


DocumentXamlText

Ιδιότητες

Καθορίζει το περιεχόμενο (το document) του TextEditorControl, τύπου String.

Σύνταξη:

VB:

Public Property DocumentXamlText As String

Τύπος: System.String

Προσδιορίζουμε μία τιμή String που θα αποτελεί το document του control.
H default τιμή είναι:

"<FlowDocument FontFamily=""Arial"" FontStyle=""Normal"" FontWeight=""Normal"" FontSize=""12"" TextAlignment=""Left"" PagePadding=""5,0,5,0"" AllowDrop=""True"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""></FlowDocument>".

Dependency Property Information:

Identifier field: DocumentXamlTextProperty

Παρατηρήσεις:

•Πρόκειται για την βασικότερη ιδιότητα. Η τιμή της είναι ένα xaml text που περιγράφει ένα αντικείμενο FlowDocument.

•Αν πρόκειται να χρησιμοποιήσουμε το control ως πεδίο σημειώσεων τότα θα κάνουμε binding αυτήν την ιδιότητα με την αντίστοιχη ιδιότητα π.χ. Notes ενός source αντικειμένου. Το source πεδίο αποθηκεύει το περιεχόμενο (document) του control στη Βάση Δεδομένων ως ένα xaml text.

•Εξ' ορισμού, η σύνδεση (binding) είναι two-way. Έτσι, οποιαδήποτε αλλαγή γίνεται από τον χρήστη στο document θα "περάσει" στο source πεδίο. Η ενημέρωση του source πεδίου γίνεται κατά την απώλεια της εστίασης (UpdateSourceTrigger.LostFocus).

•Αν συμβεί κάποιο σφάλμα στη σύνδεση (π.χ. δεν μπορεί να ανακτήσει την τιμή του source πεδίου) τότε θα εμφανίσει ένα κενό document, όπως έχει οριστεί στην ιδιότητα EmptyDocumentXamlText. Σφάλμα μπορεί να προκύψει για 2 λόγους:

oΕίτε δεν έχει οριστεί σωστά η τιμή <FlowDocument> του source πεδίου.

oΕίτε η τιμή <FlowDocument> του source πεδίου περιέχει εσωτερικά ένα inline tag <InlineUIContainer> που περιγράφει το απόλυτο path ενός αρχείου εικόνας. Αν το path δεν είναι σωστό (π.χ. μετακινήθηκε το αρχείο εικόνας σε άλλη θέση) θα προκληθεί σφάλμα.

Παράδειγμα:

Στο επόμενο παράδειγμα, έχουμε ένα αντικείμενο Student όπου μία ιδιότητά του είναι η Notes. Συνδέουμε αυτήν την ιδιότητα με την DocumentXamlText:

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

Στον VB κώδικα θέτουμε κατάλληλα την πηγή δεδομένων του txtEditor στο αντικείμενο student. Το ποιό πεδίο του student θα γίνει binding, το έχουμε θέσει παραπάνω στον XAML κώδικα, στην ιδιότητα DocumentXamlText.

'Τα δεδομένα του μαθητή...

Dim student As New Student

'... εντολή/ές που γεμίζουν το source αντικείμενο με δεδομένα, μεταξύ των οποίων και το πεδίο Notes. ...

'...και η πηγή δεδομένων για το TextEditor. Προκειμένου να γίνει το binding με το πεδίο student.Notes, όπως έχει οριστεί στον XAML κώδικα.

txtEditor.DataContext = student


EmptyDocumentXamlText

Ιδιότητες

Καθορίζει το xaml text που περιγράφει ένα κενό FlowDocument. Είναι τύπου String.

Σύνταξη:

VB:

Public Property EmptyDocumentXamlText As String

Τύπος: System.String

Προσδιορίζουμε μία τιμή String που θα αποτελεί το κενό document του control.
H default τιμή είναι:

"<FlowDocument FontFamily=""Arial"" FontStyle=""Normal"" FontWeight=""Normal"" FontSize=""12"" TextAlignment=""Left"" PagePadding=""5,0,5,0"" AllowDrop=""True"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""></FlowDocument>".

Dependency Property Information:

Identifier field: EmptyDocumentXamlTextProperty

Παρατηρήσεις:

•Αν επιθυμούμε το κενό document να έχει διαφορετικά χαρακτηριστικά από τα default, τότε μπορούμε να θέσουμε το δικό μας xaml text. Δυνητικά, θα μπορούσαμε μέσα σε αυτό να θέσουμε κι ένα default κείμενο (π.χ. εισάγετε κείμενο εδώ).

•Ένα κενό document με βάση τα χαρακτηριστικά που θέτουμε εδώ, δημιουργείται κατά τη δημιουργία νέου εγγράφου (New) ή σε περίπτωση σφάλματος.

•Αν δεν έχουμε ορίσει συντακτικά σωστά την τιμή της ιδιότητας EmptyDocumentXamlText τότε θα χρησιμοποιηθεί το εσωτερικό default empty xaml text.

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε τα διαφορετικά χαρακτηριστικά για το κενό document, συμπεριλαμβανομένου ενός προτρεπτικού κειμένου "Εισάγετε το κείμενο εδώ" με μορφοποίηση γραμματοσειράς Georgia και πλάγια γραφή. Να σημειώσουμε ότι στον XAML κώδικα το σύμβολο < είναι &lt; και το σύμβολο > είναι &gt; . Επίσης, είναι προτιμότερο να χρησιμοποιούμε απλές αποστρόφους.

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

DocumentXamlText="{Binding Notes}"

EmptyDocumentXamlText = "&lt;FlowDocument FontFamily='Arial' FontStyle='Normal' FontWeight='Normal' FontSize='12' TextAlignment='Left' PagePadding='5,0,5,0' AllowDrop='True' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'&gt;&lt;Paragraph&gt;&lt;Run FontStyle='Italic' FontFamily='Georgia'>Εισάγετε κείμενο εδώ&lt;/Run&gt;&lt;/Paragraph&gt;&lt;/FlowDocument&gt;"

BackgroundTextArea="Yellow" />

VB:

With txtEditor

.EmptyDocumentXamlText = "<FlowDocument FontFamily='Arial' FontStyle='Normal' FontWeight='Normal' FontSize='12' TextAlignment='Left' PagePadding='5,0,5,0' AllowDrop='True' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Paragraph><Run FontStyle='Italic' FontFamily='Georgia'>Εισάγετε κείμενο εδώ</Run></Paragraph></FlowDocument>"

End With


HasTextChanged

Ιδιότητες

Καθορίζει αν έχουν υπάρξει αλλαγές στο περιεχόμενο (document) του TextEditorControl. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property HasTextChanged As Boolean

Τύπος: System.Boolean

Καθορίζει αν έχει γίνει κάποια αλλαγή στο περιεχόμενο (document) του TextEditorControl. H default τιμή είναι False.

Dependency Property Information:

Identifier field: HasTextChangedProperty


LanguageUI

Ιδιότητες

Καθορίζει αν θα έχουμε Αγγλικό ή Ελληνικό UI. Είναι τύπου LanguageUIEnum .

Σύνταξη:

VB:

Public Property LanguageUI As LanguageUIEnum

Τύπος: Zeus.WPF.Controls.TextEditorControl.TextEditorControl.LanguageUIEnum

Προσδιορίζουμε μία τιμή LanguageUIEnum που καθορίζει τα λεκτικά και μηνύματα του UI. H default τιμή είναι LanguageUIEnum.Greek.

Dependency Property Information:

Identifier field: LanguageUIProperty

Παρατηρήσεις:

•Η αλλαγή αφορά τα λεκτικά των menus και tooltips καθώς και τα μηνύματα. Τα λεκτικά των dialog buttons αλλάζουν με τις αντίστοιχες ιδιότητες DialogButtonOKText και DialogButtonCancelText .

Παράδειγμα 1:

Στο επόμενο παράδειγμα, καθορίζουμε Αγγλικό UI:

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

LanguageUI="English"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

Imports Zeus.WPF.Controls.TextEditorControl.TextEditorControl

...

txtEditor.LanguageUI = LanguageUIEnum.English

Παράδειγμα 2:

Στο επόμενο παράδειγμα, καθορίζουμε Ελληνικό UI:

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

LanguageUI="Greek"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

Imports Zeus.WPF.Controls.TextEditorControl.TextEditorControl

...

txtEditor.LanguageUI = LanguageUIEnum.Greek


ScaleFactorStepForImage

Ιδιότητες

Καθορίζει το βήμα αύξησης/μείωσης για μεγέθυνση/σμίκρυνση εικόνας, αντίστοιχα. Είναι τύπου Single.

Σύνταξη:

VB:

Public Property ScaleFactorStepForImage As Single

Τύπος: System.Single

Προσδιορίζουμε μία τιμή Single, μεγαλύτερη του 0, που δηλώνει το βήμα αύξησης/μείωσης για το scaling των εικόνων. H default τιμή είναι 0.1.

Dependency Property Information:

Identifier field: ScaleFactorStepForImageProperty

Παρατηρήσεις:

•Ο χρήστης πατώντας τα κουμπιά [image] (μεγέθυνση) και [image] (σμίκρυνση), αλλάζει το μέγεθος των επιλεγμένων εικόνων κατά ένα συγκεκριμένο βήμα. Το βήμα αύξησης/μείωσης καθορίζεται από την ιδιότητα ScaleFactorStepForImage.

•Στην παρούσα έκδοση, αν και φαίνεται ότι μία εικόνα μπορεί να αντιγραφεί/αποκοπεί/μετακινηθεί και επίσης να μεγεθυνθεί/σμικρυνθεί, η αποθήκευση δημιουργεί ένα xaml text όπου το απόλυτο path είναι προσωρινό και η ανάκτηση του xaml text θα αποτύχει. Αυτό οφείλεται σε ένα εγγενές θέμα του WPF. Ελπίζω, να το επιλύσω στην επόμενη έκδοση. Προς το παρόν, ο μόνος ασφαλής τρόπος είναι να εισάγεται εικόνα μόνο μέσω του κουμπιού [image] (εισαγωγή εικόνας). Φυσικά, η αντιγραφή/αποκοπή/μετακίνηση κειμένου δεν έχει πρόβλημα.

Παράδειγμα:

Στο επόμενο παράδειγμα, έχουμε τοποθετήσει μία εικόνα στις σημειώσεις του μαθητή. Έχουμε καθορίσει βήμα μεταβολής στην ιδιότητα ScaleFactorStepForImage σε 0.2 (όσο μεγαλώνουμε την τιμή τόσο πιο γρήγορη αλλά και απότομη η αλλαγή).

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

ScaleFactorStepForImage="0.2"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

txtEditor.ScaleFactorStepForImage = 0.2

Αρχικά, όταν εισάγουμε την εικόνα:

Και όταν πατήσουμε μερικές φορές τη σμίκρυνση [image] :


ShowDialogButtons

Ιδιότητες

Καθορίζει αν θα εμφανίζονται τα dialog buttons "ΟΚ" και "Ακύρωση". Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ShowDialogButtons As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εμφανίζονται τα dialog buttons "ΟΚ" και "Ακύρωση". H default τιμή είναι True.

Dependency Property Information:

Identifier field: ShowDialogButtonsProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να αποκρυβούν τα dialog buttons:

XAML:

<zeus:TextEditorControl Name="txtEditor" ShowDialogButtons ="False" ... />

VB:

txtEditor.ShowDialogButtons = False

ShowDialogButtons = "True"

ShowDialogButtons = "False"


ShowMenu

Ιδιότητες

Καθορίζει αν θα εμφανίζονται τα menu. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ShowMenu As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εμφανίζονται τα menu. H default τιμή είναι True.

Dependency Property Information:

Identifier field: ShowMenuProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να αποκρυβούν τα menu:

XAML:

<zeus:TextEditorControl Name="txtEditor" ShowMenu ="False" ... />

VB:

txtEditor.ShowMenu = False

ShowMenu = "True"

ShowMenu = "False"


ShowSaveButtonInToolbar

Ιδιότητες

Καθορίζει αν θα εμφανίζεται το button "Αποθήκευση" στη βασική toolbar. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ShowSaveButtonInToolbar As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εμφανίζεται το button "Αποθήκευση" στη βασική toolbar. H default τιμή είναι True.

Dependency Property Information:

Identifier field: ShowSaveButtonInToolbarProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να αποκρυβεί το button "Αποθήκευση":

XAML:

<zeus:TextEditorControl Name="txtEditor" ShowSaveButtonInToolbar ="False" ... />

VB:

txtEditor.ShowSaveButtonInToolbar = False

ShowSaveButtonInToolbar = "True"

ShowSaveButtonInToolbar = "False"


ShowStandardToolbar

Ιδιότητες

Καθορίζει αν θα εμφανίζεται η βασική toolbar (new, open, save κλπ). Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ShowStandardToolbar As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εμφανίζεται η βασική (πρώτη) εργαλειοθήκη. H default τιμή είναι True.

Dependency Property Information:

Identifier field: ShowStandardToolbarProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να αποκρυβεί η βασική toolbar:

XAML:

<zeus:TextEditorControl Name="txtEditor" ShowStandardToolbar ="False" ... />

VB:

txtEditor.ShowStandardToolbar = False

ShowStandardToolbar = "True"

ShowStandardToolbar = "False"


ShowToolbars

Ιδιότητες

Καθορίζει αν θα εμφανίζονται όλες οι toolbars. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property ShowToolbars As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εμφανίζονται και οι δύο εργαλειοθήκες (πρώτη-βασική, δεύτερη-μορφοποίηση). H default τιμή είναι True.

Dependency Property Information:

Identifier field: ShowToolbarsProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε να αποκρυβούν και οι δύο toolbars, τα μενού και τα dialog buttons, απογυμνώνοντας εντελώς το control μόνο στον χώρο γραφής. Με αυτόν τον τρόπο το μετατρέπουμε σε ένα "γυμνό" πεδίο σημειώσεων που όμως εξακολουθούμε να έχουμε τη δυνατότητα εισαγωγής μορφοποιημένου κειμένου (π.χ. με συντομεύσεις CTRL+B, CTRL+I κλπ):

XAML:

<zeus:TextEditorControl Name="txtEditor" ShowMenu ="False" ShowToolbars ="False" ShowDialogButtons ="False" ... />

VB:

With txtEditor

.ShowMenu = False

.ShowToolbars = False

.ShowDialogButtons = False

End With

Το σύνηθες, όμως, είναι να είναι ορατή η μπάρα μορφοποίησης (ShowToolbars=True και ShowStandardToolbar="False").


UsingDefaultDialogButtonsStyle

Ιδιότητες

Καθορίζει αν θα εφαρμοστεί η default εμφάνιση των dialog buttons. Είναι τύπου Boolean.

Σύνταξη:

VB:

Public Property UsingDefaultDialogButtonsStyle As Boolean

Τύπος: System.Boolean

Προσδιορίζουμε μία τιμή Boolean που δηλώνει αν θα εφαρμοστεί η default εμφάνιση των dialog buttons (στρογγυλεμένο style). H default τιμή είναι True.

Dependency Property Information:

Identifier field: UsingDefaultDialogButtonsStyleProperty

Παράδειγμα:

Στο επόμενο παράδειγμα, καθορίζουμε, μεταξύ άλλων, ένα συγκεκριμένο resource style με όνομα "buttonOKStyle" και το εφαρμόζουμε στο button "OK" και ένα δεύτερο resource style με όνομα "buttonCancelStyle" και το εφαρμόζουμε στο button "Ακύρωση". Επειδή έχουν κάποια κοινά χαρακτηριστικά (Padding, Width και ένα trigger για την mouseover κατάσταση) έχουμε ορίσει να βασίζονται σε ένα βασικό resource style με όνομα DialogButtonsStyle:

XAML:

<Window x:Class="NotesWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:p="clr-namespace:TextEditorControl_Sample_Project"

xmlns:zeus="clr-namespace:Zeus.WPF.Controls.TextEditorControl;assembly=ZeusTextEditorControl"

mc:Ignorable="d"

Title="{Binding ElementName=txtEditor, Path=DocumentTitle}" Height="368.991" Width="687.465"

WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" >

<Window.Resources >

<!-- Το κοινό style για τα Dialog buttons του TextEditorControl-->

<Style x:Key="DialogButtonStyle" TargetType="{x:Type Button }">

<Setter Property="Padding" Value="5"/>

<Setter Property="Width" Value="100"/>

<Style.Triggers >

<Trigger Property="IsMouseOver" Value="True">

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="Foreground" Value="Black"/>

</Trigger>

</Style.Triggers>

</Style>

<Style x:Key="buttonOKStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Green"/>

</Style>

<Style x:Key="buttonCancelStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DialogButtonStyle}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="Background" Value="Red"/>

<Setter Property="Margin" Value="5,0,0,0"/>

</Style>

</Window.Resources>

<Grid Margin="7">

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto" BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="False"

ShowStandardToolbar="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonCancelStyle="{StaticResource buttonCancelStyle}"

DialogButtonOKStyle="{StaticResource buttonOKStyle}"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

</Grid>

</Window>

VB:

Dim txtEditorDialogButtonStyle As New Style(GetType(Button))

Dim txtEditorOKButtonStyle As New Style(GetType(Button))

Dim txtEditorCancelButtonStyle As New Style(GetType(Button))

With txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = PaddingProperty, .Value = New Thickness(5)})

.Setters.Add(New Setter With {.[Property] = WidthProperty, .Value = CDbl(100)})

.Setters.Add(New Setter With {.[Property] = HeightProperty, .Value = CDbl(30)})

Dim trigger As New Trigger With {.[Property] = IsMouseOverProperty, .Value = True}

With trigger

.Setters.Add(New Setter With {.[Property] = FontWeightProperty, .Value = FontWeights.Bold})

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.Black})

End With

.Triggers.Add(trigger)

End With

With txtEditorOKButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Green})

End With

With txtEditorCancelButtonStyle

.BasedOn = txtEditorDialogButtonStyle

.Setters.Add(New Setter With {.[Property] = ForegroundProperty, .Value = Brushes.White})

.Setters.Add(New Setter With {.[Property] = BackgroundProperty, .Value = Brushes.Red})

.Setters.Add(New Setter With {.[Property] = MarginProperty, .Value = New Thickness(5)})

End With

With txtEditor

.UsingDefaultDialogButtonsStyle = False

.DialogButtonOKStyle = txtEditorOKButtonStyle

.DialogButtonCancelStyle = txtEditorCancelButtonStyle

End With


UsingTheControlAs

Ιδιότητες

Καθορίζει πώς θα χρησιμοποιηθεί το control, ως standalone στο παράθυρο ή ως τμήμα παραθύρου και χρήση ως πεδίο σημειώσεων σε μία φόρμα δεδομένων. Είναι τύπου UsingTheControlAsEnum .

Σύνταξη:

VB:

Public Property UsingTheControlAs As UsingTheControlAsEnum

Τύπος: Zeus.WPF.Controls.TextEditorControl.TextEditorControl.UsingTheControlAsEnum

Προσδιορίζουμε μία τιμή UsingTheControlAsEnum που καθορίζει τη χρήση του control, είτε ως αυτόνομο σε ένα παράθυρο είτε ως πεδίο σημειώσεων. H default τιμή είναι UsingTheControlAsEnum.StandaloneInAWindow.

Dependency Property Information:

Identifier field: UsingTheControlAsProperty

Παρατηρήσεις:

•Η τιμή UsingTheControlAsEnum.StandaloneInAWindow εμφανίζει (αν ήταν αποκρυμμένα) τα menu και τα dialog buttons και η τιμή UsingTheControlAsEnum.PartInAWindow τα αποκρύβει. Η ιδιότητα παρέχεται ως διευκόλυνση για εύκολη εμφάνιση/απόκρυψη κάποιων UI elements για σημασιολογικό διαχωρισμό χρήσης ως ανεξάρτητου μικρού text editor ή ως πεδίου σημειώσεων σε μία φόρμα δεδομένων, χωρίς να υπάρχει κάποια δέσμευση.

Παράδειγμα:

XAML:

<zeus:TextEditorControl Name="txtEditor"

Height="140" Width="Auto" HorizontalAlignment="Left" Margin="0,10,0,0"

UsingTheControlAs="PartInAWindow"

DocumentXamlText="{Binding Notes}"

BackgroundTextArea="Yellow" />

VB:

Imports Zeus.WPF.Controls.TextEditorControl.TextEditorControl

...

txtEditor.UsingTheControlAs = UsingTheControlAsEnum.PartInAWindow


Συμβάντα - ColorSwatchHTML16

Συμβάντα

← →

Zeus TextEditorControl

Όνομα | Περιγραφή
DialogButtonOKClicked | Ενεργοποιείται όταν ο χρήστης πατήσει το dialog button "ΟΚ".
DialogButtonCancelClicked | Ενεργοποιείται όταν ο χρήστης πατήσει το dialog button "Ακύρωση".


DialogButtonOKClicked

Συμβάντα

Ενεργοποιείται όταν ο χρήστης πατήσει το dialog button "ΟΚ".

Σύνταξη:

VB (ορισμός):

Public Custom Event DialogButtonOKClicked As RoutedEventHandler

XAML attribute usage:

<zeus:TextEditorControl DialogButtonOKClicked="eventHanlder" ... />

Παράδειγμα:

Στο επόμενο παράδειγμα, έχουμε τοποθετήσει αυτόνομα το TextEditorControl, με όνομα txtEditor, σε ένα παράθυρο (Window). Όταν ο χρήστης πατήσει το button "ΟΚ" , η τιμή της ιδιότητας OKPressed του παραθύρου γίνεται True και το παράθυρο κλείνει ενώ όταν πατήσει το button "Ακύρωση" απλά κλείνει.

XAML:

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto"

BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

VB:

Public Class NotesWindow

'Τα δεδομένα του μαθητή.

Public Property student As New Student

'Πατήθηκε το ΟΚ?

Public Property OkPressed As Boolean = False

...

'Κατά το κλείσιμο επιβεβαίωση. Αν δεν επιθυμούμε επιβεβαίωση αφαιρούμε τη γραμμή κώδικα.

Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)

'Μόνο αν δεν πατήθηκε το ΟΚ δεν θα εμφανίσει παράθυρο επιβεβαίωσης εξόδου.

If Not OkPressed Then e.Cancel = Not txtEditor.GetConfirmationOnClosing

End Sub

'OK.

Private Sub txtEditor_DialogButtonOKClicked(sender As Object, e As RoutedEventArgs)

OkPressed = True

Me.Close()

End Sub

'Ακύρωση. Κλείσε το παράθυρο.

Private Sub txtEditor_DialogButtonCancelClicked(sender As Object, e As RoutedEventArgs)

Me.Close()

End Sub

End Class


DialogButtonCancelClicked

Συμβάντα

Ενεργοποιείται όταν ο χρήστης πατήσει το dialog button "Ακύρωση".

Σύνταξη:

VB (ορισμός):

Public Custom Event DialogButtonCancelClicked As RoutedEventHandler

XAML attribute usage:

<zeus:TextEditorControl DialogButtonCancelClicked="eventHanlder" ... />

Παράδειγμα:

Στο επόμενο παράδειγμα, έχουμε τοποθετήσει αυτόνομα το TextEditorControl, με όνομα txtEditor, σε ένα παράθυρο (Window). Όταν ο χρήστης πατήσει το button "ΟΚ" , η τιμή της ιδιότητας OKPressed του παραθύρου γίνεται True και το παράθυρο κλείνει ενώ όταν πατήσει το button "Ακύρωση" απλά κλείνει.

XAML:

<zeus:TextEditorControl Name="txtEditor" UsingTheControlAs="StandaloneInAWindow" Width="Auto"

BackgroundTextArea="Yellow"

UsingDefaultDialogButtonsStyle="True"

DocumentXamlText="{Binding Notes}"

LanguageUI="Greek" ConfirmOnExit="True"

DialogButtonOKClicked="txtEditor_DialogButtonOKClicked"

DialogButtonCancelClicked="txtEditor_DialogButtonCancelClicked"/>

VB:

Public Class NotesWindow

'Τα δεδομένα του μαθητή.

Public Property student As New Student

'Πατήθηκε το ΟΚ?

Public Property OkPressed As Boolean = False

...

'Κατά το κλείσιμο επιβεβαίωση. Αν δεν επιθυμούμε επιβεβαίωση αφαιρούμε τη γραμμή κώδικα.

Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)

'Μόνο αν δεν πατήθηκε το ΟΚ δεν θα εμφανίσει παράθυρο επιβεβαίωσης εξόδου.

If Not OkPressed Then e.Cancel = Not txtEditor.GetConfirmationOnClosing

End Sub

'OK.

Private Sub txtEditor_DialogButtonOKClicked(sender As Object, e As RoutedEventArgs)

OkPressed = True

Me.Close()

End Sub

'Ακύρωση. Κλείσε το παράθυρο.

Private Sub txtEditor_DialogButtonCancelClicked(sender As Object, e As RoutedEventArgs)

Me.Close()

End Sub

End Class


Μέθοδοι - SortControl

Μέθοδοι

← →

Zeus TextEditorControl

Όνομα | Περιγραφή
CopyDocument() | Αντιγράφει το document που περιέχει το control. Η αντιγραφή γίνεται εσωτερικά μέσω της ασφαλούς διαδικασίας της σειριακοποίησης του document ως xaml text.
GetConfirmationOnClosing() | Εμφανίζει ένα παράθυρο επιβεβαίωσης εξόδου από τον text editor. Επιστρέφει True αν ο χρήστης επιβεβαίωσε την έξοδο.
GetDocument() | Επιστρέφει το document που περιέχει το control.
GetDocumentAsXamlText() | Επιστρέφει το document ως xaml text, δηλαδή σειριακοποιεί το document. Αν η σειριακοποίηση δεν είναι επιτυχής επιστρέφει ένα κενό document, όπως περιγράφεται στην ιδιότητα EmptyDocumentXamlText.
GetPlainText() | Επιστρέφει μόνο το κείμενο του document (χωρίς πληροφορίες μορφοποίησης).
SetDocument(newDocument) | Θέτει το newDocument ως το νέο document του control. Η διαδικασία γίνεται εσωτερικά μέσω σειριακοποίησης, οπότε αν δεν είναι επιτυχής επιστρέφει False.
SetDocumentFromXamlText(flowDocumentXamlText) | Θέτει το document του control με βάση το flowDocumentXamlText, δηλαδή ενός xaml text που περιγράφει το document.


CopyDocument

Μέθοδοι

Αντιγράφει το document που περιέχει το control. Η αντιγραφή γίνεται εσωτερικά μέσω της ασφαλούς διαδικασίας της σειριακοποίησης του document ως xaml text.

Σύνταξη:

VB :

Public Function CopyDocument()

Επιστρεφόμενη τιμή:

Τύπος: FlowDocument.

Δημιουργεί με ασφαλή τρόπο ένα αντίγραφο του document του control.

Παράδειγμα:

Στο επόμενο παράδειγμα, καλούμε την CopyDocument για να δημιουργήσουμε ένα αντίγραφο του document του txtEditor:

VB:

Dim flowDoc As FlowDocument = txtEditor.CopyDocument

If flowDoc IsNot Nothing Then

'κάνε κάτι με το flowDoc...

End If


GetConfirmationOnClosing

Μέθοδοι

Εμφανίζει ένα παράθυρο επιβεβαίωσης εξόδου από τον text editor. Επιστρέφει True αν ο χρήστης επιβεβαίωσε την έξοδο.

Σύνταξη:

VB :

Public Function GetConfirmationOnClosing()

Επιστρεφόμενη τιμή:

Τύπος: Boolean.

True, αν ο χρήστης επιβεβαίωσε την έξοδο.

Παρατηρήσεις:

•Αν η ιδιότητα ConfirmOnExit έχει τεθεί σε False τότε η μέθοδος επιστρέφει πάντα True.

Παράδειγμα:

Στο επόμενο παράδειγμα, τοποθετούμε κώδικα για επιβεβαίωση εξόδου στο συμβάν Closing του Window. Υποθέτουμε ότι έχουμε εισάγει το TextEditorControl ως μικρό αυτόνομο επεξεργαστή κειμένου μέσα στο παράθυρο:

VB:

'Κατά το κλείσιμο επιβεβαίωση. Αν δεν επιθυμούμε επιβεβαίωση αφαιρούμε τη γραμμή κώδικα.

Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)

e.Cancel = Not txtEditor.GetConfirmationOnClosing

End Sub


GetDocument

Μέθοδοι

Επιστρέφει το document που περιέχει το control.

Σύνταξη:

VB :

Public Function GetDocument()

Επιστρεφόμενη τιμή:

Τύπος: FlowDocument.

Επιστρέφει απ' ευθείας το document του control, χωρίς την σειριακοποίηση σε xaml text.

Παρατηρήσεις:

•Αν επιθυμούμε να αποδώσουμε το document σε ένα άλλο RichTextBox control τότε να προτιμήσουμε την ασφαλή μέθοδο CopyDocument κι όχι την GetDocument. Η GetDocument θα πάρει μία αναφορά στην ίδια διεύθυνση του document και αν προσπαθήσουμε να την αποδώσουμε σε άλλο RichTextBox control θα προκληθεί σφάλμα. Στο WPF, δύο RichTextBoxes δεν επιτρέπεται να αναφέρονται στο ίδιο document. Για την περίπτωση αυτή, χρησιμοποιούμε την CopyDocument.

Παράδειγμα:

Στο επόμενο παράδειγμα, καλούμε την GetDocument και λαμβάνουμε το document του txtEditor:

VB:

Dim flowDoc As FlowDocument = txtEditor.GetDocument

If flowDoc IsNot Nothing Then

'κάνε κάτι με το flowDoc...

End If


GetDocumentAsXamlText

Μέθοδοι

Επιστρέφει το document ως xaml text, δηλαδή σειριακοποιεί το document.

Σύνταξη:

VB :

Public Function GetDocumentAsXamlText()

Επιστρεφόμενη τιμή:

Τύπος: String.

To αλφαριθμητικό περιέχει ένα xaml text με root element το <FlowDocument>. Με άλλα λόγια, περιγράφει ένα αντικείμενο FlowDocument. Αν προκληθεί σφάλμα κατά τη σειριακοποίηση, θα επιστρέψει το κενό document όπως έχει τεθεί στην ιδιότητα EmptyDocumentXamlText.

Παράδειγμα:

Στο επόμενο παράδειγμα, καλούμε την GetDocumentAsXamlText του txtEditor:

VB:

Dim xamlText As String = txtEditor.GetDocumentAsXamlText

MessageBox.Show(xamlText, "Xaml Text")

To document, όπως φαίνεται στην παρακάτω εικόνα:

και το MessageBox με το xaml text που περιγράφει το document:


GetPlainText

Μέθοδοι

Επιστρέφει μόνο το κείμενο του document (χωρίς πληροφορίες μορφοποίησης).

Σύνταξη:

VB :

Public Function GetPlainText()

Επιστρεφόμενη τιμή:

Τύπος: String.

To αλφαριθμητικό περιέχει μόνο το κείμενο του document. Αν προκληθεί σφάλμα, θα επιστρέψει την τιμή String.Empty.

Παράδειγμα:

Στο επόμενο παράδειγμα, καλούμε την GetPlainText του txtEditor:

VB:

Dim plainText As String = txtEditor.GetPlainText

MessageBox.Show(plainText, "Plain Text")

To document, όπως φαίνεται στην παρακάτω εικόνα:

και το MessageBox με το plain text:


SetDocument

Μέθοδοι

Θέτει το newDocument ως το νέο document του control. Η διαδικασία γίνεται εσωτερικά μέσω σειριακοποίησης, οπότε αν δεν είναι επιτυχής επιστρέφει False.

Σύνταξη:

VB :

Public Function SetDocument(

newDocument As FlowDocument

)

Παράμετροι:

newDocument

Τύπος: FlowDocument

Το αντικείμενο FlowDocument που τίθεται ως το νέο document του control.

Επιστρεφόμενη τιμή:

Τύπος: Boolean.

True, αν η απόδοση του αντικειμένου newDocument ήταν επιτυχής.

Παράδειγμα:

Στο επόμενο παράδειγμα, έχουμε ήδη ένα RichTextBox, με όνομα rtfBox, και αποδίδουμε το document που περιέχει στο txtEditor:

VB:

txtEditor.SetDocument(rtfBox.Document)


SetDocumentFromXamlText

←

Μέθοδοι

Θέτει το document του control με βάση το flowDocumentXamlText, δηλαδή ενός xaml text που περιγράφει το document.

Σύνταξη:

VB :

Public Function SetDocumentFromXamlText(

flowDocumentXamlText As FlowDocument

)

Παράμετροι:

flowDocumentXamlText

Τύπος: String

Το αλφαριθμητικό είναι ένα xaml text, δηλαδή περιγράφει ένα αντικείμενο FlowDocument, που θα τεθεί ως περιεχόμενο στο control.

Επιστρεφόμενη τιμή:

Τύπος: Boolean.

True, αν η απόδοση του αντικειμένου FlowDocument, που περιγράφεται από το flowDocumentXamlText, ήταν επιτυχής.

Παράδειγμα:

Στο επόμενο παράδειγμα, δημιουργούμε ένα xaml text με ένα μορφοποιημένο κείμενο μηνύματος, και δημιουργούμε το document από αυτό στο txtEditor:

VB:

Dim xamlText As String = "<FlowDocument FontFamily='Arial' FontStyle='Normal' FontWeight='Normal' FontSize='16' TextAlignment='Left' PagePadding='5,0,5,0' AllowDrop='True' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Paragraph><Run FontStyle='Italic' FontFamily='Georgia'>Καταχωρήστε τις σημειώσεις εδώ</Run></Paragraph></FlowDocument>"

txtEditor.SetDocumentFromXamlText(xamlText)

.